﻿Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Public Class cConsultas
    Public Shared Function Obtener_Profesores() As List(Of cProfesor)
        Dim listadoProfesores As New List(Of cProfesor)()
        Try
            Dim dtbDatos As New DataTable
            Dim cmd As New SqlCommand("select NOMBRE,APELLIDOS,EMAIL FROM USUARIOS WHERE CODIGO_TIPO_USUARIO IN (1,2)")
            If Not cMotorBD.EjecutarConsulta(cmd, dtbDatos) Then
                Throw New Exception("Error al obtener los profesores")
            End If
            For Each row As DataRow In dtbDatos.Rows
                listadoProfesores.Add(New cProfesor(Convert.ToString(row.Item("NOMBRE")), Convert.ToString(row.Item("APELLIDOS")), Convert.ToString(row.Item("EMAIL"))))
            Next

        Catch ex As Exception
            Return Nothing
        End Try
        Return listadoProfesores
    End Function
    Public Shared Function Obtener_periodos(ByRef dtbPeriodos As DataTable) As Boolean
        Dim bolResultado As Boolean = True
        Try
            Dim cComando As New SqlClient.SqlCommand("SELECT CODIGO_PERIODO,DESCRIPCION_PERIODO FROM PERIODOS")
            dtbPeriodos = New DataTable()
            If Not cMotorBD.EjecutarConsulta(cComando, dtbPeriodos) Then
                Throw New Exception("Error al obtener los periodos.")
            End If
        Catch ex As Exception
            bolResultado = False
        End Try
        Return bolResultado
    End Function
    Public Shared Function Obtener_Turnos(ByRef dtbTurnos As DataTable) As Boolean
        Dim bolResultado As Boolean = True
        Try
            Dim cComando As New SqlClient.SqlCommand("SELECT CODIGO_TURNO,DESCRIPCION_TURNO FROM TURNOS")
            dtbTurnos = New DataTable()
            If Not cMotorBD.EjecutarConsulta(cComando, dtbTurnos) Then
                Throw New Exception("Error al obtener los Turnos.")
            End If
        Catch ex As Exception
            bolResultado = False
        End Try
        Return bolResultado
    End Function

    Public Shared Function Obtener_Asignaturas(ByRef dtbAsignaturas As DataTable) As Boolean
        Dim bolResultado As Boolean = True
        Try
            Dim cComando As New SqlClient.SqlCommand("SELECT CODIGO_ASIGNATURA,NOMBRE FROM ASIGNATURAS")
            dtbAsignaturas = New DataTable()
            If Not cMotorBD.EjecutarConsulta(cComando, dtbAsignaturas) Then
                Throw New Exception("Error al obtener los Asignaturas.")
            End If
        Catch ex As Exception
            bolResultado = False
        End Try
        Return bolResultado
    End Function
    Public Shared Function Obtener_Horario(ByVal strCodigoHorario As String, ByRef listadoClases As List(Of cHorario)) As Boolean
        Dim bolresultado As Boolean = True
        Dim dtbDatos As New DataTable
        Dim aux As List(Of cHorario)
        Dim cmd As New SqlClient.SqlCommand("SELECT F.DESCRIPCION_FRANJA,CODIGO_DIA_SEMANA,A.NOMBRE FROM CLASES C " & _
"left JOIN FRANJAS_HORARIAS F ON C.CODIGO_FRANJA_HORARIA = F.CODIGO_FRANJA_HORARIA " & _
"left JOIN ASIGNATURAS A ON A.CODIGO_ASIGNATURA = C.CODIGO_ASIGNATURA " & _
"WHERE CODIGO_HORARIO=@HORARIO")
        Try
            cmd.Parameters.AddWithValue("HORARIO", strCodigoHorario)
            If Not cMotorBD.EjecutarConsulta(cmd, dtbDatos) Then Throw New Exception("Error")
            listadoClases = New List(Of cHorario)()
            For Each row As DataRow In dtbDatos.Rows
                listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA"))
                If Not listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).Any() Then
                    Dim horario As New cHorario()
                    horario.Franja = row("DESCRIPCION_FRANJA")
                    listadoClases.Add(horario)
                End If
                Select Case row("CODIGO_DIA_SEMANA")
                    Case "L"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseLunes = Convert.ToString(row("NOMBRE"))
                    Case "M"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseMartes = Convert.ToString(row("NOMBRE"))
                    Case "X"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseMiercoles = Convert.ToString(row("NOMBRE"))
                    Case "J"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseJueves = Convert.ToString(row("NOMBRE"))
                    Case "V"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseViernes = Convert.ToString(row("NOMBRE"))
                    Case "S"
                        listadoClases.Where(Function(a) a.Franja = row("DESCRIPCION_FRANJA")).FirstOrDefault().ClaseSabado = Convert.ToString(row("NOMBRE"))
                End Select
            Next



        Catch ex As Exception
            bolresultado = False
        End Try
        Return bolresultado

    End Function

    Public Shared Function Obtener_Franjas(ByRef dtbDatos As DataTable, ByVal parametros As SqlClient.SqlParameter()) As Boolean
        Dim bolresultado As Boolean = True
        Try
            Dim cmd As New SqlClient.SqlCommand("select codigo_franja_horaria,curso_academico,descripcion_franja from franjas_horarias where CODIGO_TIPO_CLASE='TU' and curso_academico=@curso_academico and codigo_turno=@codigo_turno")
            For Each param As SqlClient.SqlParameter In parametros
                cmd.Parameters.Add(param)
            Next
            dtbDatos = New DataTable()
            If Not (cMotorBD.EjecutarConsulta(cmd, dtbDatos)) Then
                Throw New Exception("Error al obtener las franjas horarias")
            End If
            dtbDatos.Columns.Add(New DataColumn("Lunes"))
            dtbDatos.Columns.Add(New DataColumn("Martes"))
            dtbDatos.Columns.Add(New DataColumn("Miercoles"))
            dtbDatos.Columns.Add(New DataColumn("Jueves"))
            dtbDatos.Columns.Add(New DataColumn("Viernes"))
            dtbDatos.Columns.Add(New DataColumn("Sabado"))

        Catch ex As Exception
            bolresultado = False
        End Try
        Return bolresultado

    End Function
    Public Shared Function Obtener_Versiones(ByRef dtbDatos As DataTable, ByVal parametros As SqlClient.SqlParameter()) As Boolean
        Dim bolresultado As Boolean = True
        Try
            Dim cmd As New SqlClient.SqlCommand("SELECT NUMERO_VERSION, CODIGO_HORARIO FROM HORARIOS " & _
                                         "WHERE CURSO_ACADEMICO=@CURSO_ACADEMICO " & _
                                            "AND FECHA_LUNES_SEMANA = @FECHA " & _
                                            "AND CODIGO_PERIODO=@CODIGO_PERIODO " & _
                                            "AND CODIGO_TIPO_HORARIO=@CODIGO_TIPO " & _
                                            "AND CODIGO_TIPO_CLASE=@CODIGO_TIPO_CLASE" & _
                                         " ORDER BY NUMERO_VERSION DESC")
            For Each param As SqlClient.SqlParameter In parametros
                cmd.Parameters.Add(param)
            Next
            dtbDatos = New DataTable()
            If Not (cMotorBD.EjecutarConsulta(cmd, dtbDatos)) Then
                Throw New Exception("Error al obtener las franjas horarias")
            End If

        Catch ex As Exception
            bolresultado = False
        End Try
        Return bolresultado

    End Function
    Public Shared Sub Rellenar_DDLTodosCursos_SinNulos(ByRef ddl As DropDownList)
        Dim año As Integer
        Dim curso As String

        For año = 2000 To 2098
            curso = año.ToString & "/" & (año + 1).ToString().Substring(2)
            ddl.Items.Add(New ListItem(curso, (año + 1).ToString()))
        Next

        ddl.DataBind()

        'Seleccionamos automáticamente el año en curso para evitar
        'que el usuario tenga que buscarlo por sí solo
        'Si la fecha de hoy es de los meses del principio del curso académico
        If Today().Month >= 10 And Today.Month() <= 12 Then
            ddl.SelectedValue = Today().Year() + 1
        Else 'si es de los del final
            ddl.SelectedValue = Today().Year()
        End If
    End Sub
  
End Class